package xkp.xkp.lesson5;

import xkp.lesson4.Driver;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.Arrays;


public class TestByteArrayStream {
    public static void main(String[] args) throws IOException {
        //1、注意：流都是成对出现(输入/输出)
        //ByteArrayInputStream
        //数据源：文件 FileInputStream\FileOutputStream   FileReader\FileWriter
        //数据源：内存 ByteArrayInputStream\ByteArrayOutputStream   CharArrayReader\CharArrayWriter

        //ByteArrayOutputStream
        //3w 1h
        //what是什么(数据流) where 在哪用(当数据源为内存数据时) why 为什么这样用(尤其在序列化中可以显著提高效率)
        //how 怎么用(常见用法)
        //1、数据源
        byte[] arr = {0,1,2,3,4,5,6,7,8,9,10,11,12};
        //把arr作为数据源
        ByteArrayInputStream inputStream = new ByteArrayInputStream(arr);
        byte[] arr2 = new byte[10];
        //此处没有使用for循环，不用遍历，速度非常快
        inputStream.read(arr2,2,7);
        System.out.println(Arrays.toString(arr2));

        //数据源是文件时，程序内存与文件进行数据交互
        //数据源是内存
        //ByteArrayOutputStream是把数据写入到一块内存中
        //正常来说，构架流是要指定数据源
        //因为ByteArrayOutputStream的数据源是自己对象中的一块内存区域
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
        //把arr保存在自己的buf内存中
        byteArrayOutputStream.write(arr);
        //toByteArray取出内存中的数据
        //byteArrayOutputStream.toByteArray();
        ByteArrayInputStream byteArrayInputStream2 = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());

        //序列化和反序列化
        //如果想要在网络(比较有趣，比较难)中传输一个对象

    }
}
